package com.iman.sumer.web.space;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.iman.common.Constants;
import com.iman.common.support.Page;
import com.iman.sumer.service.space.CollectService;
import com.iman.sumer.vo.sapce.CollectFolderVo;
import com.iman.sumer.vo.sapce.CollectInfoVo;
import com.iman.sumer.web.BaseController;

/**
 * 职业规划
 */
@Controller
@RequestMapping(value = "/sumer/collect/*")
public class CollectController extends BaseController {

	@Autowired
	private CollectService collectService;

	/**
	 * 
	 *  Function:
	 *  功能说明：   初始查询页面  现实的是自己的
	 *	 使用说明：
	 *  @author  wangxiaolei  DateTime 2014年12月18日 上午12:01:51
	 *	返回类型: ModelAndView    
	 *  @param request
	 *  @return
	 */
	@RequestMapping(value = "/init")
	public ModelAndView init(HttpServletRequest request,Long showID) throws Exception {
		return initCollect(request, "0", "10",null);
	}
	
	/**
	 * 
	 *  Function:
	 *  功能说明：显示指定的 人的内容
	 *	 使用说明：
	 *  @author  wangxiaolei  DateTime 2015年5月25日 下午10:05:50
	 *	返回类型: ModelAndView    
	 *  @param request
	 *  @param showid
	 *  @return
	 *  @throws Exception
	 */
	@RequestMapping(value = "/init/{showid}")
	public ModelAndView init(HttpServletRequest request,@Valid @PathVariable String showid) throws Exception {
		Long userId = null;
		if(NumberUtils.isNumber( showid)){
			userId = NumberUtils.toLong(showid);
		}
	
		return initCollect(request, "0", "10",userId);
	}
	

	/**
	 * 
	 *  Function:
	 *  功能说明：根据 输入的showId  显示特定的人的内容
	 *	 使用说明：
	 *  @author  wangxiaolei  DateTime 2015年5月25日 下午10:03:32
	 *	返回类型: ModelAndView    
	 *  @param request
	 *  @param pageNo
	 *  @param pageSize
	 *  @param showid
	 *  @return
	 *  @throws Exception
	 */
	@RequestMapping(value = "/initCollect/{pageNo}/{pageSize}/{showid}")
	public ModelAndView initCollectShower(HttpServletRequest request, @Valid @PathVariable String pageNo,
			@Valid @PathVariable String pageSize ,@Valid @PathVariable String showid) throws Exception {
		
		Long userId = null;
		if(NumberUtils.isNumber( showid)){
			userId = NumberUtils.toLong(showid);
		}
		
		return this.initCollect(request, pageNo, pageSize, userId);
	}
	
	/**
	 * 
	 *  Function:
	 *  功能说明：如果经过上面传递的 ID 意味着根据ＩＤ显示
	 *	 使用说明：
	 *  @author  wangxiaolei  DateTime 2015年5月25日 下午10:02:43
	 *	返回类型: ModelAndView    
	 *  @param request
	 *  @param pageNo
	 *  @param pageSize
	 *  @param userId
	 *  @return
	 *  @throws Exception
	 */
	 	
	@RequestMapping(value = "/initCollect/{pageNo}/{pageSize}")
	public ModelAndView initCollect(HttpServletRequest request, @Valid @PathVariable String pageNo,
			@Valid @PathVariable String pageSize ,Long showId) throws Exception {
		if (!StringUtils.isNumeric(pageNo)) {
			throw new IllegalArgumentException("无效分页参数");
		}
		if (!StringUtils.isNumeric(pageSize)) {
			throw new IllegalArgumentException("无效分页参数");
		}

		// 收藏列表
		Map<String, Object> mapDmsg = new HashMap<String, Object>();
		mapDmsg.put(Constants.PAGE_INDEX_KEY, Integer.parseInt(pageNo));
		mapDmsg.put(Constants.PAGE_SIZE_KEY, Integer.parseInt(pageSize));
		
		
		//如果没有 怎是方位的是自己，如果有内容，意味着访问别人的内容
		mapDmsg.put("userId", (showId ==null || showId<100 ) ? this.getUserIdInSession(request)  : showId);

		if(showId == null)
		{
			showId = showId==null?this.getUserIdInSession(request):showId ;
		}
		 
		
		Page<CollectInfoVo> pageData = collectService.getCollectInfoPage(mapDmsg);
		List<CollectFolderVo> folderStatic = collectService.getCollectFolderStatic(mapDmsg);

		Map<String, Object> model = new HashMap<String, Object>();
		model.put("pageData", pageData);
		model.put("folderStatic", folderStatic);

		ModelAndView view = new ModelAndView("space/collect", model);

		//  加入 给前台 是否是自己的数据 ，和  传递 showId 
		boolean isme = super.isMeData(request, showId);
		super.putShowId(view, showId, isme);
		
		// 每个做后都要加上这个
		putResourceSrc(view ,request );
		// 点击tab颜色
		view.addObject("tabstatus", "collect");
		return view;
	}
	
	
	/**
	 * 
	 *  Function:
	 *  功能说明：只限制自己的数据操作
	 *	 使用说明：
	 *  @author  wangxiaolei  DateTime 2015年5月25日 下午10:07:28
	 *	返回类型: Map<String,Integer>    
	 *  @param request
	 *  @param folderName
	 *  @return
	 */
	@RequestMapping(value = "/addCollectFolder")
	@ResponseBody
	public Map<String, Integer> addCollectFolder(HttpServletRequest request, String folderName) {
		Map<String, Integer> map = new HashMap<String, Integer>();

		Map<String, Object> param = new HashMap<String, Object>();
		param.put("folderName", folderName);
		param.put("userId", this.getUserIdInSession(request));
		try {
			if (collectService.getCollectFolderCnt(param) > 0) {
				map.put("state", -1);
			} else {
				collectService.insertCollectFolder(param);
				map.put("state", 1);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return map;
	}

	/**
	 * 
	 *  Function:
	 *  功能说明：只限制自己的数据操作
	 *	 使用说明：
	 *  @author  wangxiaolei  DateTime 2015年5月25日 下午10:07:54
	 *	返回类型: Map<String,Integer>    
	 *  @param request
	 *  @param id
	 *  @return
	 */
	@RequestMapping(value = "/delCollectInfo")
	@ResponseBody
	public Map<String, Integer> delCollectInfo(HttpServletRequest request, Long id) {
		Map<String, Integer> map = new HashMap<String, Integer>();
		try {
			collectService.delCollectInfo(id);
			map.put("state", 1);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return map;
	}

	/******************************************************************************************************************************/

	/**
	 * 
	 *  Function:
	 *  功能说明：   初始查询页面， 不输入ID 就只限制自己的数据操作
	 *	 使用说明：
	 *  @author  wangxiaolei  DateTime 2014年12月18日 上午12:01:51
	 *	返回类型: ModelAndView    
	 *  @param request
	 *  @return
	 */
	@RequestMapping(value="/manage/{pageNo}/{pageSize}")
	public ModelAndView manage(HttpServletRequest request,@Valid @PathVariable String pageNo,
			@Valid @PathVariable String pageSize){	
		if (!StringUtils.isNumeric(pageNo)) {
			throw new IllegalArgumentException("无效分页参数");
		}
		if (!StringUtils.isNumeric(pageSize)) {
			throw new IllegalArgumentException("无效分页参数");
		}
		Map<String,Object> model = new HashMap<String,Object>();
		Long userId = this.getUserIdInSession(request);
		Map<String, Object> mapDmsg = new HashMap<String, Object>();
		mapDmsg.put(Constants.PAGE_INDEX_KEY, Integer.parseInt(pageNo));
		mapDmsg.put(Constants.PAGE_SIZE_KEY, Integer.parseInt(pageSize));
		
		
		//如果没有 怎是方位的是自己，如果有内容，意味着访问别人的内容
		mapDmsg.put("userId",userId);
		
		 
		Page<CollectFolderVo> pageData = collectService.getCollectFolder(mapDmsg);
		//List<CollectFolderVo> folderStatic = collectService.getCollectFolderStatic(mapDmsg);

		model.put("pageData", pageData);
		//model.put("folder", folderStatic);
		ModelAndView view = new ModelAndView("space/collect_manage",model);
		
		boolean isme = super.isMeData(request, userId);
		super.putShowId(view, userId, isme);
		
		//每个做后都要加上这个
		putResourceSrc(view ,request );
		//点击tab颜色
		view.addObject("tabstatus" , "collect");
		return view;
	}
	
/******************************************************************************************************************************/
	
/**
 * 删除收藏夹
 */
	@RequestMapping(value = "/delCollectFolder")
	@ResponseBody
	public Map<String, Integer> delCollectFolder(HttpServletRequest request, Long id) {
		Map<String, Integer> map = new HashMap<String, Integer>();
		try {
			collectService.delCollectFolder(id);
			map.put("state", 1);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return map;
	}
	
	/**
	 * 编辑收藏夹
	 * 
	 */
	@RequestMapping(value = "/editCollectFolder")
	@ResponseBody
	public Map<String, Integer> editCollectFolder(HttpServletRequest request, Long id,String folderName) {
		Map<String, Integer> map = new HashMap<String, Integer>();
		try {
			collectService.editCollectInfo(id,folderName);
			map.put("state", 1);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return map;
	}
	
	@RequestMapping(value = "/manage")
	public ModelAndView initManage(HttpServletRequest request) throws Exception {
		return manage(request, "0", "10");
	}
	
	 
}
